// ProjectName: go-learn-demo
// PackageName: _3_flag
// Description:
// Author: hy.bai
// Date: 2025-08-01 20:03

package main

import (
	"flag"
	"fmt"
	"time"
)

// 定义一个main函数
func main() {
	// 1.定义变量
	var (
		name    string        // 姓名
		age     int           // 年龄
		married bool          // 婚否
		deplay  time.Duration // 有效期
	)

	// 2.定义命令行参数
	// 把命令行参数和变量进行绑定。
	// 参数1: 是通过指针指定把命令行参数的值保存到name变量中
	// 参数2: 是命令行参数的名字
	// 参数3: 是默认值
	// 参数4: 是命令行参数描述
	flag.StringVar(&name, "name", "ybxb", "姓名")
	flag.IntVar(&age, "age", 18, "年龄")
	flag.BoolVar(&married, "married", false, "婚否")
	flag.DurationVar(&deplay, "deplay", 0, "有效期")

	// 3.解析命令行参数
	flag.Parse()

	// 4.使用参数
	fmt.Println(name, age, married, deplay)

	// flag.Args()是非参数的其他内容
	args := flag.Args()
	fmt.Printf("Args方法的返回值类型是:%T, %v\n", args, args)
	// 配置成：-name=xyz -age=30 -married=true -deplay=1h a b c
	// 打印：Args方法的返回值类型是:[]string, [a b c]
	fmt.Printf("NArg:%d\n", flag.NArg()) // 返回非参数的其他内容的长度
	// 例如：配置成：-name=xyz -age=30 -married=true -deplay=1h a b c 打印结果是:NArg:3
	fmt.Printf("NFlag:%d\n", flag.NFlag()) // 返回参数的长度。
	// 例如：配置成：-name=xyz -age=30 -married=true -deplay=1h a b c 打印结果是:NFlag:4(有name、age、married、deplay四个参数)
}
